package com.stylefeng.guns.modular.fileManage.service.impl;

import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.stylefeng.guns.common.persistence.dao.ZyRecycleMapper;
import com.stylefeng.guns.common.persistence.model.ZyRecycle;
import com.stylefeng.guns.config.properties.GunsProperties;
import com.stylefeng.guns.modular.fileManage.dao.ZyBrewsPictureDao;
import com.stylefeng.guns.modular.fileManage.dao.ZyRecycleDao;
import com.stylefeng.guns.modular.fileManage.dao.ZyTeaDao;
import com.stylefeng.guns.modular.fileManage.dao.ZyTeaPictureDao;
import com.stylefeng.guns.modular.fileManage.service.IZyRecycleService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.io.File;

import java.util.Date;


@Service
public class ZyRecycleServiceImpl extends ServiceImpl<ZyRecycleMapper, ZyRecycle> implements IZyRecycleService {

    @Autowired
    private ZyRecycleDao recycleDao;

    @Autowired
    private ZyRecycleMapper recycleMapper;

    @Autowired
    private ZyTeaDao teaDao;

    @Autowired
    private ZyTeaPictureDao teaPictureDao;

    @Autowired
    private ZyBrewsPictureDao brewsPictureDao;

    @Autowired
    private GunsProperties gunsProperties;
    /**
     * 添加到回收站
     *
     * @param
     */
    public Integer addRecycle(Integer teaFileId, String tableName, String keyName, String keyValue, String crtUser) {
        //校验参数
        ZyRecycle item = new ZyRecycle();
        item.setId(teaFileId);
        item.setTableName(tableName);
        item.setKeyName(keyName);
        item.setKeyValue(keyValue);
        item.setCrtUser(crtUser);
        item.setCrtTime(new Date());

        return recycleMapper.insertAllColumn(item);
    }

    /**
     * 恢复条目
     *
     * @param item
     * @return 成功返回1，失败返回0
     */
    @Override
    public void recover(ZyRecycle item) {
        //把实体表中的状态字段更改为正常（status = 1）
        recycleDao.updateStatus(item);
        //恢复状态后删除回收站中的记录
        recycleMapper.deleteById(item.getId());
    }

    /**
     * 删除条目（彻底删除数据）
     */
    @Override
    public void removeRecycle(ZyRecycle item) {
        //如果有二维码照片就同时要删除二维码照片
        if (item.getTableName().equals("zy_tea")) {
            this.deleteQRPic(item);
            //先删除茶叶图片关联表中的关联记录
            teaPictureDao.deleteByTeaId(item.getId());
        }else if(item.getTableName().equals("zy_brews")){
            //先删除冲泡方式与图片关联表中的关联记录
            brewsPictureDao.deleteByBrewsId(item.getId());
            //将关联的茶叶表中brewsId字段置为空
            teaDao.updateBrewsIdToNull(item.getId());
        }
        //删除实体表中数据
        recycleDao.deleteItem(item);
        //删除回收站中的数据
        recycleDao.deleteByIdAndTableName(item);
    }

    //删除二维码图片
    public void deleteQRPic(ZyRecycle item) {
        //图片名称
        String name = item.getKeyValue();
        //图片ID
        String id = item.getId().toString();
        //拼接图片名称
        String picUrl = name + "_" + id;

        String fileUrl = gunsProperties.getQaCodePath() + picUrl+".png";
        //获得这个文件
        File file = new File(fileUrl);
        //调用删除文件方法
        deleat(file);
    }

    private static void deleat(File file) {
        //检查文件是否存在，如果不存在直接返回，不进行下面的操作
        if (!file.exists()) {
            return;
        }
        //如果是文件删除，就删除文件，然后返回，不进行下面的操作
        if (file.isFile()) {
            file.delete();
            return;
        }
    }
};
